home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr47 / 335_01.zip / AS6502.Y < prev    next >
Text File  |  1993-04-01  |  43KB  |  1,741 lines

  1. %{
  2.  
  3. /*
  4. HEADER:     ;
  5. TITLE:         Frankenstein Cross Assemblers;
  6. VERSION:     2.0;
  7. DESCRIPTION: "    Reconfigurable Cross-assembler producing Intel (TM)
  8.         Hex format object records.  ";
  9. KEYWORDS:     cross-assemblers, 1805, 2650, 6301, 6502, 6805, 6809, 
  10.         6811, tms7000, 8048, 8051, 8096, z8, z80;
  11. SYSTEM:     UNIX, MS-Dos ;
  12. FILENAME:     as6502.y;
  13. WARNINGS:     "This software is in the public domain.  
  14.         Any prior copyright claims are relinquished.  
  15.  
  16.         This software is distributed with no warranty whatever.  
  17.         The author takes no responsibility for the consequences 
  18.         of its use.
  19.  
  20.         Yacc (or Bison) required to compile."  ;
  21. SEE-ALSO:     as6502.doc,frasmain.c;    
  22. AUTHORS:     Mark Zenier;
  23. COMPILERS:     Microport Sys V/AT, ATT Yacc, Turbo C V1.5, Bison (CUG disk 285)
  24.         (previous versions Xenix, Unisoft 68000 Version 7, Sun 3);
  25. */
  26. /* 65xx instruction generation file */
  27. /* November 17, 1990 */
  28.  
  29. /*
  30.     description    frame work parser description for framework cross
  31.             assemblers
  32.     history        February 2, 1988
  33.             September 11, 1990 - merge table definition
  34.             September 12, 1990 - short file names
  35.             September 14, 1990 - short variable names
  36.             September 17, 1990 - use yylex as external
  37. */
  38. #include <stdio.h>
  39. #include "frasmdat.h"
  40. #include "fragcon.h"
  41.  
  42. #define yylex lexintercept
  43.  
  44. /*    0000.0000.0000.00xx        address mode selection bits */
  45. #define    ADDRESS        0x3
  46. #define    DIRECT        0x1
  47. #define    EXTENDED    0x2
  48. /*    0000.0000.0000.xx00        index selector bits */
  49. #define    INDEXMASK    0xc
  50. #define    INDEXX        0x4
  51. #define    INDEXY        0x8
  52. /*    0000.0xxx.0000.0000        instruction set enable bits */
  53. #define    INSTCMOS    0x100
  54. #define    INSTROCKWELL    0x200
  55. #define    INST21        0x400
  56. /*                    instruction sets */
  57. #define    CPU65        0
  58. #define    CPUR65        INSTROCKWELL
  59. #define    CPU65C        INSTCMOS
  60. #define    CPUR65C        (INSTROCKWELL|INSTCMOS)
  61. #define    CPUR21        (INSTROCKWELL|INST21)
  62. #define ST_INH 0x1
  63. #define ST_ACCUM 0x2
  64. #define ST_EXPR 0x4
  65. #define ST_INDEX 0x8
  66. #define ST_PREINDEX 0x10
  67. #define ST_INDIR 0x20
  68. #define ST_POSTINDEX 0x40
  69. #define ST_IMMED 0x80
  70. #define ST_DIRREL 0x100
  71.     
  72.     int    cpuselect = CPUR65C;
  73.     static char    genbdef[] = "[1=];";
  74.     static char    genwdef[] = "[1=]y"; /* x for normal, y for byte rev */
  75.     char ignosyn[] = "[Xinvalid syntax for instruction";
  76.     char ignosel[] = "[Xinvalid operands/illegal instruction for cpu";
  77.  
  78.     long    labelloc;
  79.     static int satsub;
  80.     int    ifstkpt = 0;
  81.     int    fraifskip = FALSE;
  82.  
  83.     struct symel * endsymbol = SYMNULL;
  84.  
  85. %}
  86. %union {
  87.     int    intv;
  88.     long     longv;
  89.     char    *strng;
  90.     struct symel *symb;
  91. }
  92.  
  93. %type <intv> topexpr
  94. %token ACCUM
  95. %token <intv> INDEX
  96. %token <intv> KOC_BDEF
  97. %token <intv> KOC_ELSE
  98. %token <intv> KOC_END
  99. %token <intv> KOC_ENDI
  100. %token <intv> KOC_EQU
  101. %token <intv> KOC_IF
  102. %token <intv> KOC_INCLUDE
  103. %token <intv> KOC_ORG
  104. %token <intv> KOC_RESM
  105. %token <intv> KOC_SDEF
  106. %token <intv> KOC_SET
  107. %token <intv> KOC_WDEF
  108. %token <intv> KOC_CHSET
  109. %token <intv> KOC_CHDEF
  110. %token <intv> KOC_CHUSE
  111. %token <intv> KOC_CPU
  112. %token <intv> KOC_opcode
  113.  
  114. %token <longv> CONSTANT
  115. %token EOL
  116. %token KEOP_AND
  117. %token KEOP_DEFINED
  118. %token KEOP_EQ
  119. %token KEOP_GE
  120. %token KEOP_GT
  121. %token KEOP_HIGH
  122. %token KEOP_LE
  123. %token KEOP_LOW
  124. %token KEOP_LT
  125. %token KEOP_MOD
  126. %token KEOP_MUN
  127. %token KEOP_NE
  128. %token KEOP_NOT
  129. %token KEOP_OR
  130. %token KEOP_SHL
  131. %token KEOP_SHR
  132. %token KEOP_XOR
  133. %token KEOP_locctr
  134. %token <symb> LABEL
  135. %token <strng> STRING
  136. %token <symb> SYMBOL
  137.  
  138. %token KTK_invalid
  139.  
  140. %right    KEOP_HIGH KEOP_LOW
  141. %left    KEOP_OR KEOP_XOR
  142. %left    KEOP_AND
  143. %right    KEOP_NOT
  144. %nonassoc    KEOP_GT KEOP_GE KEOP_LE KEOP_LT KEOP_NE KEOP_EQ
  145. %left    '+' '-'
  146. %left    '*' '/' KEOP_MOD KEOP_SHL KEOP_SHR
  147. %right    KEOP_MUN
  148.  
  149.  
  150. %type <intv> expr exprlist stringlist
  151.  
  152. %start file
  153.  
  154. %%
  155.  
  156. file    :    file allline
  157.     |    allline
  158.     ;
  159.  
  160. allline    :     line EOL
  161.             {
  162.                 clrexpr();
  163.             }
  164.     |    EOL
  165.     |    error EOL
  166.             {
  167.                 clrexpr();
  168.                 yyerrok;
  169.             }
  170.     ;
  171.  
  172. line    :    LABEL KOC_END 
  173.             {
  174.                 endsymbol = $1;
  175.                 nextreadact = Nra_end;
  176.             }
  177.     |          KOC_END 
  178.             {
  179.                 nextreadact = Nra_end;
  180.             }
  181.     |    KOC_INCLUDE STRING
  182.             {
  183.         if(nextfstk >= FILESTKDPTH)
  184.         {
  185.             fraerror("include file nesting limit exceeded");
  186.         }
  187.         else
  188.         {
  189.             infilestk[nextfstk].fnm = savestring($2,strlen($2));
  190.             if( (infilestk[nextfstk].fpt = fopen($2,"r"))
  191.                 ==(FILE *)NULL )
  192.             {
  193.                 fraerror("cannot open include file");
  194.             }
  195.             else
  196.             {
  197.                 nextreadact = Nra_new;
  198.             }
  199.         }
  200.             }
  201.     |    LABEL KOC_EQU expr 
  202.             {
  203.                 if($1 -> seg == SSG_UNDEF)
  204.                 {
  205.                     pevalexpr(0, $3);
  206.                     if(evalr[0].seg == SSG_ABS)
  207.                     {
  208.                         $1 -> seg = SSG_EQU;
  209.                         $1 -> value = evalr[0].value;
  210.                         prtequvalue("C: 0x%lx\n",
  211.                             evalr[0].value);
  212.                     }
  213.                     else
  214.                     {
  215.                         fraerror(
  216.                     "noncomputable expression for EQU");
  217.                     }
  218.                 }
  219.                 else
  220.                 {
  221.                     fraerror(
  222.                 "cannot change symbol value with EQU");
  223.                 }
  224.             }
  225.     |    LABEL KOC_SET expr 
  226.             {
  227.                 if($1 -> seg == SSG_UNDEF
  228.                    || $1 -> seg == SSG_SET)
  229.                 {
  230.                     pevalexpr(0, $3);
  231.                     if(evalr[0].seg == SSG_ABS)
  232.                     {
  233.                         $1 -> seg = SSG_SET;
  234.                         $1 -> value = evalr[0].value;
  235.                         prtequvalue("C: 0x%lx\n",
  236.                             evalr[0].value);
  237.                     }
  238.                     else
  239.                     {
  240.                         fraerror(
  241.                     "noncomputable expression for SET");
  242.                     }
  243.                 }
  244.                 else
  245.                 {
  246.                     fraerror(
  247.                 "cannot change symbol value with SET");
  248.                 }
  249.             }
  250.     |    KOC_IF expr 
  251.             {
  252.         if((++ifstkpt) < IFSTKDEPTH)
  253.         {
  254.             pevalexpr(0, $2);
  255.             if(evalr[0].seg == SSG_ABS)
  256.             {
  257.                 if(evalr[0].value != 0)
  258.                 {
  259.                     elseifstk[ifstkpt] = If_Skip;
  260.                     endifstk[ifstkpt] = If_Active;
  261.                 }
  262.                 else
  263.                 {
  264.                     fraifskip = TRUE;
  265.                     elseifstk[ifstkpt] = If_Active;
  266.                     endifstk[ifstkpt] = If_Active;
  267.                 }
  268.             }
  269.             else
  270.             {
  271.                 fraifskip = TRUE;
  272.                 elseifstk[ifstkpt] = If_Active;
  273.                 endifstk[ifstkpt] = If_Active;
  274.             }
  275.         }
  276.         else
  277.         {
  278.             fraerror("IF stack overflow");
  279.         }
  280.             }
  281.                         
  282.     |    KOC_IF 
  283.             {
  284.         if(fraifskip) 
  285.         {
  286.             if((++ifstkpt) < IFSTKDEPTH)
  287.             {
  288.                     elseifstk[ifstkpt] = If_Skip;
  289.                     endifstk[ifstkpt] = If_Skip;
  290.             }
  291.             else
  292.             {
  293.                 fraerror("IF stack overflow");
  294.             }
  295.         }
  296.         else
  297.         {
  298.             yyerror("syntax error");
  299.             YYERROR;
  300.         }
  301.                 }
  302.                         
  303.     |    KOC_ELSE 
  304.             {
  305.                 switch(elseifstk[ifstkpt])
  306.                 {
  307.                 case If_Active:
  308.                     fraifskip = FALSE;
  309.                     break;
  310.                 
  311.                 case If_Skip:
  312.                     fraifskip = TRUE;
  313.                     break;
  314.                 
  315.                 case If_Err:
  316.                     fraerror("ELSE with no matching if");
  317.                     break;
  318.                 }
  319.             }
  320.  
  321.     |    KOC_ENDI 
  322.             {
  323.                 switch(endifstk[ifstkpt])
  324.                 {
  325.                 case If_Active:
  326.                     fraifskip = FALSE;
  327.                     ifstkpt--;
  328.                     break;
  329.                 
  330.                 case If_Skip:
  331.                     fraifskip = TRUE;
  332.                     ifstkpt--;
  333.                     break;
  334.                 
  335.                 case If_Err:
  336.                     fraerror("ENDI with no matching if");
  337.                     break;
  338.                 }
  339.             }
  340.     |    LABEL KOC_ORG expr 
  341.             {
  342.                 pevalexpr(0, $3);
  343.                 if(evalr[0].seg == SSG_ABS)
  344.                 {
  345.                     locctr = labelloc = evalr[0].value;
  346.                     if($1 -> seg == SSG_UNDEF)
  347.                     {
  348.                         $1 -> seg = SSG_ABS;
  349.                         $1 -> value = labelloc;
  350.                     }
  351.                     else
  352.                         fraerror(
  353.                         "multiple definition of label");
  354.                     prtequvalue("C: 0x%lx\n",
  355.                         evalr[0].value);
  356.                 }
  357.                 else
  358.                 {
  359.                     fraerror(
  360.                      "noncomputable expression for ORG");
  361.                 }
  362.             }
  363.     |          KOC_ORG expr 
  364.             {
  365.                 pevalexpr(0, $2);
  366.                 if(evalr[0].seg == SSG_ABS)
  367.                 {
  368.                     locctr = labelloc = evalr[0].value;
  369.                     prtequvalue("C: 0x%lx\n",
  370.                         evalr[0].value);
  371.                 }
  372.                 else
  373.                 {
  374.                     fraerror(
  375.                      "noncomputable expression for ORG");
  376.                 }
  377.             }
  378.     |    LABEL KOC_CHSET
  379.             {
  380.                 if($1 -> seg == SSG_UNDEF)
  381.                 {
  382.                     $1 -> seg = SSG_EQU;
  383.                     if( ($1->value = chtcreate()) <= 0)
  384.                     {
  385.         fraerror( "cannot create character translation table");
  386.                     }
  387.                     prtequvalue("C: 0x%lx\n", $1 -> value);
  388.                 }
  389.                 else
  390.                 {
  391.             fraerror( "multiple definition of label");
  392.                 }
  393.             }
  394.     |        KOC_CHUSE
  395.             {
  396.                 chtcpoint = (int *) NULL;
  397.                 prtequvalue("C: 0x%lx\n", 0L);
  398.             }
  399.     |        KOC_CHUSE expr
  400.             {
  401.                 pevalexpr(0, $2);
  402.                 if( evalr[0].seg == SSG_ABS)
  403.                 {
  404.                     if( evalr[0].value == 0)
  405.                     {
  406.                         chtcpoint = (int *)NULL;
  407.                         prtequvalue("C: 0x%lx\n", 0L);
  408.                     }
  409.                     else if(evalr[0].value < chtnxalph)
  410.                     {
  411.                 chtcpoint = chtatab[evalr[0].value];
  412.                 prtequvalue("C: 0x%lx\n", evalr[0].value);
  413.                     }
  414.                     else
  415.                     {
  416.             fraerror("nonexistent character translation table");
  417.                     }
  418.                 }
  419.                 else
  420.                 {
  421.                     fraerror("noncomputable expression");
  422.                 }
  423.             }
  424.     |        KOC_CHDEF STRING ',' exprlist
  425.             {
  426.         int findrv, numret, *charaddr;
  427.         char *sourcestr = $2, *before;
  428.  
  429.         if(chtnpoint != (int *)NULL)
  430.         {
  431.             for(satsub = 0; satsub < $4; satsub++)
  432.             {
  433.                 before = sourcestr;
  434.  
  435.                 pevalexpr(0, exprlist[satsub]);
  436.                 findrv = chtcfind(chtnpoint, &sourcestr,
  437.                         &charaddr, &numret);
  438.                 if(findrv == CF_END)
  439.                 {
  440.             fraerror("more expressions than characters");
  441.                     break;
  442.                 }
  443.  
  444.                 if(evalr[0].seg == SSG_ABS)
  445.                 {
  446.                     switch(findrv)
  447.                     {
  448.                     case CF_UNDEF:
  449.                         {
  450.                 if(evalr[0].value < 0 ||
  451.                     evalr[0].value > 255)
  452.                 {
  453.             frawarn("character translation value truncated");
  454.                 }
  455.                 *charaddr = evalr[0].value & 0xff;
  456.                 prtequvalue("C: 0x%lx\n", evalr[0].value);
  457.                         }
  458.                         break;
  459.  
  460.                     case CF_INVALID:
  461.                     case CF_NUMBER:
  462.                 fracherror("invalid character to define", 
  463.                     before, sourcestr);
  464.                         break;
  465.  
  466.                     case CF_CHAR:
  467.                 fracherror("character already defined", 
  468.                     before, sourcestr);
  469.                         break;
  470.                     }
  471.                 }
  472.                 else
  473.                 {
  474.                     fraerror("noncomputable expression");
  475.                 }
  476.             }
  477.  
  478.             if( *sourcestr != '\0')
  479.             {
  480.                 fraerror("more characters than expressions");
  481.             }
  482.         }
  483.         else
  484.         {
  485.             fraerror("no CHARSET statement active");
  486.         }
  487.             
  488.             }
  489.     |    LABEL 
  490.             {
  491.             if($1 -> seg == SSG_UNDEF)
  492.             {
  493.                 $1 -> seg = SSG_ABS;
  494.                 $1 -> value = labelloc;
  495.                 prtequvalue("C: 0x%lx\n", labelloc);
  496.  
  497.             }
  498.             else
  499.                 fraerror(
  500.                 "multiple definition of label");
  501.             }
  502.     |    labeledline
  503.     ;
  504.  
  505. labeledline :    LABEL genline
  506.             {
  507.             if($1 -> seg == SSG_UNDEF)
  508.             {
  509.                 $1 -> seg = SSG_ABS;
  510.                 $1 -> value = labelloc;
  511.             }
  512.             else
  513.                 fraerror(
  514.                 "multiple definition of label");
  515.             labelloc = locctr;
  516.             }
  517.                 
  518.     |    genline
  519.             {
  520.                 labelloc = locctr;
  521.             }
  522.     ;
  523.  
  524. genline    :    KOC_BDEF    exprlist 
  525.             {
  526.                 genlocrec(currseg, labelloc);
  527.                 for( satsub = 0; satsub < $2; satsub++)
  528.                 {
  529.                     pevalexpr(1, exprlist[satsub]);
  530.                     locctr += geninstr(genbdef);
  531.                 }
  532.             }
  533.     |    KOC_SDEF stringlist 
  534.             {
  535.                 genlocrec(currseg, labelloc);
  536.                 for(satsub = 0; satsub < $2; satsub++)
  537.                 {
  538.                     locctr += genstring(stringlist[satsub]);
  539.                 }
  540.             }
  541.     |    KOC_WDEF exprlist 
  542.             {
  543.                 genlocrec(currseg, labelloc);
  544.                 for( satsub = 0; satsub < $2; satsub++)
  545.                 {
  546.                     pevalexpr(1, exprlist[satsub]);
  547.                     locctr += geninstr(genwdef);
  548.                 }
  549.             }    
  550.     |    KOC_RESM expr 
  551.             {
  552.                 pevalexpr(0, $2);
  553.                 if(evalr[0].seg == SSG_ABS)
  554.                 {
  555.                     locctr = labelloc + evalr[0].value;
  556.                     prtequvalue("C: 0x%lx\n", labelloc);
  557.                 }
  558.                 else
  559.                 {
  560.                     fraerror(
  561.                  "noncomputable result for RMB expression");
  562.                 }
  563.             }
  564.     ;
  565.  
  566. exprlist :    exprlist ',' expr
  567.             {
  568.                 exprlist[nextexprs ++ ] = $3;
  569.                 $$ = nextexprs;
  570.             }
  571.     |    expr
  572.             {
  573.                 nextexprs = 0;
  574.                 exprlist[nextexprs ++ ] = $1;
  575.                 $$ = nextexprs;
  576.             }
  577.     ;
  578.  
  579. stringlist :    stringlist ',' STRING
  580.             {
  581.                 stringlist[nextstrs ++ ] = $3;
  582.                 $$ = nextstrs;
  583.             }
  584.     |    STRING
  585.             {
  586.                 nextstrs = 0;
  587.                 stringlist[nextstrs ++ ] = $1;
  588.                 $$ = nextstrs;
  589.             }
  590.     ;
  591.  
  592.  
  593. line    :    KOC_CPU STRING
  594.             {
  595.         if( ! cpumatch($2))
  596.         {
  597.             fraerror("unknown cpu type, R65C02 assumed");
  598.             cpuselect = CPUR65C;
  599.         }
  600.             }
  601.     ;
  602. genline : KOC_opcode 
  603.             {
  604.         genlocrec(currseg, labelloc);
  605.         locctr += geninstr(findgen($1, ST_INH, cpuselect));
  606.             }
  607.     ;
  608. genline : KOC_opcode  ACCUM
  609.             {
  610.         genlocrec(currseg, labelloc);
  611.         locctr += geninstr(findgen($1, ST_ACCUM, cpuselect));
  612.             }
  613.     ;
  614. genline : KOC_opcode  topexpr
  615.             {
  616.         pevalexpr(1, $2);
  617.         genlocrec(currseg, labelloc);
  618.         locctr += geninstr( findgen( $1, ST_EXPR, 
  619.                   ( (evalr[1].seg == SSG_ABS 
  620.                 && evalr[1].value >= 0
  621.                 && evalr[1].value <= 255 )
  622.                 ? DIRECT : EXTENDED ) | cpuselect )
  623.                 );
  624.             }
  625.     ;
  626. genline : KOC_opcode  topexpr ',' INDEX
  627.             {
  628.         pevalexpr(1, $2);
  629.         genlocrec(currseg, labelloc);
  630.         locctr += geninstr( findgen( $1, ST_INDEX, 
  631.                   ( (evalr[1].seg == SSG_ABS 
  632.                 && evalr[1].value >= 0
  633.                 && evalr[1].value <= 255 )
  634.                 ? DIRECT : EXTENDED ) | cpuselect | $4 )
  635.                 );
  636.             }
  637.     ;
  638. genline : KOC_opcode  '(' topexpr ',' INDEX ')'
  639.             {
  640.         pevalexpr(1, $3);
  641.         genlocrec(currseg, labelloc);
  642.         locctr += geninstr( findgen( $1, ST_PREINDEX, 
  643.                   ( (evalr[1].seg == SSG_ABS 
  644.                 && evalr[1].value >= 0
  645.                 && evalr[1].value <= 255 )
  646.                 ? DIRECT : EXTENDED ) | cpuselect | $5 )
  647.                 );
  648.             }
  649.     ;
  650. genline : KOC_opcode  '(' topexpr ')'
  651.             {
  652.         pevalexpr(1, $3);
  653.         genlocrec(currseg, labelloc);
  654.         locctr += geninstr( findgen( $1, ST_INDIR, 
  655.                   ( (evalr[1].seg == SSG_ABS 
  656.                 && evalr[1].value >= 0
  657.                 && evalr[1].value <= 255 )
  658.                 ? DIRECT : EXTENDED ) | cpuselect )
  659.                 );
  660.             }
  661.     ;
  662. genline : KOC_opcode  '(' topexpr ')' ',' INDEX
  663.             {
  664.         pevalexpr(1, $3);
  665.         genlocrec(currseg, labelloc);
  666.         locctr += geninstr( findgen( $1, ST_POSTINDEX, 
  667.                   ( (evalr[1].seg == SSG_ABS 
  668.                 && evalr[1].value >= 0
  669.                 && evalr[1].value <= 255 )
  670.                 ? DIRECT : EXTENDED ) | cpuselect | $6 )
  671.                 );
  672.             }
  673.     ;
  674. genline : KOC_opcode  '#' topexpr
  675.             {
  676.         pevalexpr(1, $3);
  677.         genlocrec(currseg, labelloc);
  678.         locctr += geninstr( findgen($1, ST_IMMED, cpuselect));
  679.             }
  680.     ;
  681. genline : KOC_opcode  topexpr ',' topexpr
  682.             {
  683.         pevalexpr(1, $2);
  684.         pevalexpr(2, $4);
  685.         genlocrec(currseg, labelloc);
  686.         locctr += geninstr( findgen($1, ST_DIRREL, cpuselect));
  687.             }
  688.     ;
  689. topexpr    :    '+' expr %prec KEOP_MUN
  690.             {
  691.                 $$ = $2;
  692.             }
  693.     |    '-' expr %prec KEOP_MUN
  694.             {
  695.                 $$ = exprnode(PCCASE_UN,$2,IFC_NEG,0,0L,
  696.                     SYMNULL);
  697.             }
  698.     |    KEOP_NOT expr
  699.             {
  700.                 $$ = exprnode(PCCASE_UN,$2,IFC_NOT,0,0L,
  701.                     SYMNULL);
  702.             }
  703.     |    KEOP_HIGH expr
  704.             {
  705.                 $$ = exprnode(PCCASE_UN,$2,IFC_HIGH,0,0L,
  706.                     SYMNULL);
  707.             }
  708.     |    KEOP_LOW expr
  709.             {
  710.                 $$ = exprnode(PCCASE_UN,$2,IFC_LOW,0,0L,
  711.                     SYMNULL);
  712.             }
  713.     |    expr '*' expr
  714.             {
  715.                 $$ = exprnode(PCCASE_BIN,$1,IFC_MUL,$3,0L,
  716.                     SYMNULL);
  717.             }
  718.     |    expr '/' expr
  719.             {
  720.                 $$ = exprnode(PCCASE_BIN,$1,IFC_DIV,$3,0L,
  721.                     SYMNULL);
  722.             }
  723.     |    expr '+' expr
  724.             {
  725.                 $$ = exprnode(PCCASE_BIN,$1,IFC_ADD,$3,0L,
  726.                     SYMNULL);
  727.             }
  728.     |    expr '-' expr
  729.             {
  730.                 $$ = exprnode(PCCASE_BIN,$1,IFC_SUB,$3,0L,
  731.                     SYMNULL);
  732.             }
  733.     |    expr KEOP_MOD expr
  734.             {
  735.                 $$ = exprnode(PCCASE_BIN,$1,IFC_MOD,$3,0L,
  736.                     SYMNULL);
  737.             }
  738.     |    expr KEOP_SHL expr
  739.             {
  740.                 $$ = exprnode(PCCASE_BIN,$1,IFC_SHL,$3,0L,
  741.                     SYMNULL);
  742.             }
  743.     |    expr KEOP_SHR expr
  744.             {
  745.                 $$ = exprnode(PCCASE_BIN,$1,IFC_SHR,$3,0L,
  746.                     SYMNULL);
  747.             }
  748.     |    expr KEOP_GT expr
  749.             {
  750.                 $$ = exprnode(PCCASE_BIN,$1,IFC_GT,$3,0L,
  751.                     SYMNULL);
  752.             }
  753.     |    expr KEOP_GE expr
  754.             {
  755.                 $$ = exprnode(PCCASE_BIN,$1,IFC_GE,$3,0L,
  756.                     SYMNULL);
  757.             }
  758.     |    expr KEOP_LT expr
  759.             {
  760.                 $$ = exprnode(PCCASE_BIN,$1,IFC_LT,$3,0L,
  761.                     SYMNULL);
  762.             }
  763.     |    expr KEOP_LE expr
  764.             {
  765.                 $$ = exprnode(PCCASE_BIN,$1,IFC_LE,$3,0L,
  766.                     SYMNULL);
  767.             }
  768.     |    expr KEOP_NE expr
  769.             {
  770.                 $$ = exprnode(PCCASE_BIN,$1,IFC_NE,$3,0L,
  771.                     SYMNULL);
  772.             }
  773.     |    expr KEOP_EQ expr
  774.             {
  775.                 $$ = exprnode(PCCASE_BIN,$1,IFC_EQ,$3,0L,
  776.                     SYMNULL);
  777.             }
  778.     |    expr KEOP_AND expr
  779.             {
  780.                 $$ = exprnode(PCCASE_BIN,$1,IFC_AND,$3,0L,
  781.                     SYMNULL);
  782.             }
  783.     |    expr KEOP_OR expr
  784.             {
  785.                 $$ = exprnode(PCCASE_BIN,$1,IFC_OR,$3,0L,
  786.                     SYMNULL);
  787.             }
  788.     |    expr KEOP_XOR expr
  789.             {
  790.                 $$ = exprnode(PCCASE_BIN,$1,IFC_XOR,$3,0L,
  791.                     SYMNULL);
  792.             }
  793.     |    KEOP_DEFINED SYMBOL
  794.             {
  795.                 $$ = exprnode(PCCASE_DEF,0,IGP_DEFINED,0,0L,$2);
  796.             }
  797.     |    SYMBOL
  798.             {
  799.                 $$ = exprnode(PCCASE_SYMB,0,IFC_SYMB,0,0L,$1);
  800.             }
  801.     |    '*'
  802.             {
  803.                 $$ = exprnode(PCCASE_PROGC,0,IFC_PROGCTR,0,
  804.                     labelloc, SYMNULL);
  805.             }
  806.     |    CONSTANT
  807.             {
  808.                 $$ = exprnode(PCCASE_CONS,0,IGP_CONSTANT,0,$1,
  809.                     SYMNULL);
  810.             }
  811.     |    STRING
  812.             {
  813.                 char *sourcestr = $1;
  814.                 long accval = 0;
  815.  
  816.                 if(strlen($1) > 0)
  817.                 {
  818.                     accval = chtran(&sourcestr);
  819.                     if(*sourcestr != '\0')
  820.                     {
  821.                         accval = (accval << 8) +
  822.                             chtran(&sourcestr);
  823.                     }
  824.  
  825.                     if( *sourcestr != '\0')
  826.                     {
  827.     frawarn("string constant in expression more than 2 characters long");
  828.                     }
  829.                 }
  830.                 $$ = exprnode(PCCASE_CONS, 0, IGP_CONSTANT, 0,
  831.                     accval, SYMNULL);
  832.             }
  833.     ;
  834.  
  835. expr    :    '(' topexpr ')'
  836.             {
  837.                 $$ = $2;
  838.             }
  839.     |    topexpr
  840.     ;
  841.  
  842.  
  843.  
  844. %%
  845.  
  846. lexintercept()
  847. /*
  848.     description    intercept the call to yylex (the lexical analyzer)
  849.             and filter out all unnecessary tokens when skipping
  850.             the input between a failed IF and its matching ENDI or
  851.             ELSE
  852.     globals     fraifskip    the enable flag
  853. */
  854. {
  855. #undef yylex
  856.  
  857.     int rv;
  858.  
  859.     if(fraifskip)
  860.     {
  861.         for(;;)
  862.         {
  863.  
  864.             switch(rv = yylex())
  865.  
  866.             {
  867.             case 0:
  868.             case KOC_END:
  869.             case KOC_IF:
  870.             case KOC_ELSE:
  871.             case KOC_ENDI:
  872.             case EOL:
  873.                 return rv;
  874.             default:
  875.                 break;
  876.             }
  877.         }
  878.     }
  879.     else
  880.         return yylex();
  881. #define yylex lexintercept
  882. }
  883.  
  884.  
  885.  
  886. setreserved()
  887. {
  888.  
  889.     reservedsym("and", KEOP_AND, 0);
  890.     reservedsym("defined", KEOP_DEFINED,0);
  891.     reservedsym("eq", KEOP_EQ, 0);
  892.     reservedsym("ge", KEOP_GE, 0);
  893.     reservedsym("gt", KEOP_GT, 0);
  894.     reservedsym("high", KEOP_HIGH, 0);
  895.     reservedsym("le", KEOP_LE, 0);
  896.     reservedsym("low", KEOP_LOW, 0);
  897.     reservedsym("lt", KEOP_LT, 0);
  898.     reservedsym("mod", KEOP_MOD, 0);
  899.     reservedsym("ne", KEOP_NE, 0);
  900.     reservedsym("not", KEOP_NOT, 0);
  901.     reservedsym("or", KEOP_OR, 0);
  902.     reservedsym("shl", KEOP_SHL, 0);
  903.     reservedsym("shr", KEOP_SHR, 0);
  904.     reservedsym("xor", KEOP_XOR, 0);
  905.     reservedsym("AND", KEOP_AND, 0);
  906.     reservedsym("DEFINED", KEOP_DEFINED,0);
  907.     reservedsym("EQ", KEOP_EQ, 0);
  908.     reservedsym("GE", KEOP_GE, 0);
  909.     reservedsym("GT", KEOP_GT, 0);
  910.     reservedsym("HIGH", KEOP_HIGH, 0);
  911.     reservedsym("LE", KEOP_LE, 0);
  912.     reservedsym("LOW", KEOP_LOW, 0);
  913.     reservedsym("LT", KEOP_LT, 0);
  914.     reservedsym("MOD", KEOP_MOD, 0);
  915.     reservedsym("NE", KEOP_NE, 0);
  916.     reservedsym("NOT", KEOP_NOT, 0);
  917.     reservedsym("OR", KEOP_OR, 0);
  918.     reservedsym("SHL", KEOP_SHL, 0);
  919.     reservedsym("SHR", KEOP_SHR, 0);
  920.     reservedsym("XOR", KEOP_XOR, 0);
  921.  
  922.     /* machine specific token definitions */
  923.     reservedsym("a", ACCUM, 0);
  924.     reservedsym("x", INDEX, INDEXX);
  925.     reservedsym("y", INDEX, INDEXY);
  926.     reservedsym("A", ACCUM, 0);
  927.     reservedsym("X", INDEX, INDEXX);
  928.     reservedsym("Y", INDEX, INDEXY);
  929.  
  930. }
  931.  
  932.  
  933. cpumatch(str)
  934.     char * str;
  935. {
  936.     int msub;
  937.  
  938.     static struct
  939.     {
  940.         char * mtch;
  941.         int   cpuv;
  942.     } matchtab[] =
  943.     {
  944.         {"R65C", CPUR65C },
  945.         {"r65c", CPUR65C },
  946.         {"65C", CPU65C },
  947.         {"65c", CPU65C },
  948.         {"R65", CPUR65 },
  949.         {"r65", CPUR65 },
  950.         {"21", CPUR21 },
  951.         {"65", CPU65 },
  952.         {"", 0} 
  953.     };
  954.  
  955.     for(msub = 0; matchtab[msub].mtch[0] != '\0'; msub++)
  956.     {
  957.         if(strcontains(str, matchtab[msub].mtch))
  958.         {
  959.             cpuselect = matchtab[msub].cpuv;
  960.             return TRUE;
  961.         }
  962.     }
  963.  
  964.     return FALSE;
  965. }
  966.  
  967.  
  968. strcontains(s1, sm)
  969.     char * s1, *sm;
  970. {
  971.     int l1 = strlen(s1), lm = strlen(sm);
  972.  
  973.     for(; l1 >= lm; l1--, s1++)
  974.     {
  975.         if(strncmp(s1, sm, lm) == 0)
  976.         {
  977.             return TRUE;
  978.         }
  979.     }
  980.     return FALSE;
  981. }
  982.  
  983. /*
  984.     description    Opcode and Instruction generation tables
  985.     usage        Unix, framework crossassembler
  986.     history        September 25, 1987
  987. */
  988.  
  989. #define NUMOPCODE 124
  990. #define NUMSYNBLK 166
  991. #define NUMDIFFOP 221
  992.  
  993. int gnumopcode = NUMOPCODE;
  994.  
  995. int ophashlnk[NUMOPCODE];
  996.  
  997. struct opsym optab[NUMOPCODE+1]
  998.     = {
  999.     {"invalid", KOC_opcode, 2, 0 },
  1000.     {"ADC", KOC_opcode, 6, 2 },
  1001.     {"AND", KOC_opcode, 6, 8 },
  1002.     {"ASL", KOC_opcode, 3, 14 },
  1003.     {"BBR0", KOC_opcode, 1, 17 },
  1004.     {"BBR1", KOC_opcode, 1, 18 },
  1005.     {"BBR2", KOC_opcode, 1, 19 },
  1006.     {"BBR3", KOC_opcode, 1, 20 },
  1007.     {"BBR4", KOC_opcode, 1, 21 },
  1008.     {"BBR5", KOC_opcode, 1, 22 },
  1009.     {"BBR6", KOC_opcode, 1, 23 },
  1010.     {"BBR7", KOC_opcode, 1, 24 },
  1011.     {"BBS0", KOC_opcode, 1, 25 },
  1012.     {"BBS1", KOC_opcode, 1, 26 },
  1013.     {"BBS2", KOC_opcode, 1, 27 },
  1014.     {"BBS3", KOC_opcode, 1, 28 },
  1015.     {"BBS4", KOC_opcode, 1, 29 },
  1016.     {"BBS5", KOC_opcode, 1, 30 },
  1017.     {"BBS6", KOC_opcode, 1, 31 },
  1018.     {"BBS7", KOC_opcode, 1, 32 },
  1019.     {"BCC", KOC_opcode, 1, 33 },
  1020.     {"BCS", KOC_opcode, 1, 34 },
  1021.     {"BEQ", KOC_opcode, 1, 35 },
  1022.     {"BGE", KOC_opcode, 1, 36 },
  1023.     {"BIT", KOC_opcode, 3, 37 },
  1024.     {"BLT", KOC_opcode, 1, 40 },
  1025.     {"BMI", KOC_opcode, 1, 41 },
  1026.     {"BNE", KOC_opcode, 1, 42 },
  1027.     {"BPL", KOC_opcode, 1, 43 },
  1028.     {"BRA", KOC_opcode, 1, 44 },
  1029.     {"BRK", KOC_opcode, 2, 45 },
  1030.     {"BVC", KOC_opcode, 1, 47 },
  1031.     {"BVS", KOC_opcode, 1, 48 },
  1032.     {"BYTE", KOC_BDEF, 0, 0 },
  1033.     {"CHARDEF", KOC_CHDEF, 0, 0 },
  1034.     {"CHARSET", KOC_CHSET, 0, 0 },
  1035.     {"CHARUSE", KOC_CHUSE, 0, 0 },
  1036.     {"CHD", KOC_CHDEF, 0, 0 },
  1037.     {"CLC", KOC_opcode, 1, 49 },
  1038.     {"CLD", KOC_opcode, 1, 50 },
  1039.     {"CLI", KOC_opcode, 1, 51 },
  1040.     {"CLV", KOC_opcode, 1, 52 },
  1041.     {"CMP", KOC_opcode, 6, 53 },
  1042.     {"CPU", KOC_CPU, 0, 0 },
  1043.     {"CPX", KOC_opcode, 2, 59 },
  1044.     {"CPY", KOC_opcode, 2, 61 },
  1045.     {"DB", KOC_BDEF, 0, 0 },
  1046.     {"DEC", KOC_opcode, 3, 63 },
  1047.     {"DEX", KOC_opcode, 1, 66 },
  1048.     {"DEY", KOC_opcode, 1, 67 },
  1049.     {"DW", KOC_WDEF, 0, 0 },
  1050.     {"ELSE", KOC_ELSE, 0, 0 },
  1051.     {"END", KOC_END, 0, 0 },
  1052.     {"ENDI", KOC_ENDI, 0, 0 },
  1053.     {"EOR", KOC_opcode, 6, 68 },
  1054.     {"EQU", KOC_EQU, 0, 0 },
  1055.     {"FCB", KOC_BDEF, 0, 0 },
  1056.     {"FCC", KOC_SDEF, 0, 0 },
  1057.     {"FDB", KOC_WDEF, 0, 0 },
  1058.     {"IF", KOC_IF, 0, 0 },
  1059.     {"INC", KOC_opcode, 3, 74 },
  1060.     {"INCL", KOC_INCLUDE, 0, 0 },
  1061.     {"INCLUDE", KOC_INCLUDE, 0, 0 },
  1062.     {"INX", KOC_opcode, 1, 77 },
  1063.     {"INY", KOC_opcode, 1, 78 },
  1064.     {"JMP", KOC_opcode, 3, 79 },
  1065.     {"JSR", KOC_opcode, 1, 82 },
  1066.     {"LDA", KOC_opcode, 6, 83 },
  1067.     {"LDX", KOC_opcode, 3, 89 },
  1068.     {"LDY", KOC_opcode, 3, 92 },
  1069.     {"LSR", KOC_opcode, 3, 95 },
  1070.     {"MUL", KOC_opcode, 1, 98 },
  1071.     {"NOP", KOC_opcode, 1, 99 },
  1072.     {"ORA", KOC_opcode, 6, 100 },
  1073.     {"ORG", KOC_ORG, 0, 0 },
  1074.     {"PHA", KOC_opcode, 1, 106 },
  1075.     {"PHP", KOC_opcode, 1, 107 },
  1076.     {"PHX", KOC_opcode, 1, 108 },
  1077.     {"PHY", KOC_opcode, 1, 109 },
  1078.     {"PLA", KOC_opcode, 1, 110 },
  1079.     {"PLP", KOC_opcode, 1, 111 },
  1080.     {"PLX", KOC_opcode, 1, 112 },
  1081.     {"PLY", KOC_opcode, 1, 113 },
  1082.     {"RESERVE", KOC_RESM, 0, 0 },
  1083.     {"RMB0", KOC_opcode, 1, 114 },
  1084.     {"RMB1", KOC_opcode, 1, 115 },
  1085.     {"RMB2", KOC_opcode, 1, 116 },
  1086.     {"RMB3", KOC_opcode, 1, 117 },
  1087.     {"RMB4", KOC_opcode, 1, 118 },
  1088.     {"RMB5", KOC_opcode, 1, 119 },
  1089.     {"RMB6", KOC_opcode, 1, 120 },
  1090.     {"RMB7", KOC_opcode, 1, 121 },
  1091.     {"RMB", KOC_RESM, 0, 0 },
  1092.     {"ROL", KOC_opcode, 3, 122 },
  1093.     {"ROR", KOC_opcode, 3, 125 },
  1094.     {"RTI", KOC_opcode, 1, 128 },
  1095.     {"RTS", KOC_opcode, 1, 129 },
  1096.     {"SBC", KOC_opcode, 6, 130 },
  1097.     {"SEC", KOC_opcode, 1, 136 },
  1098.     {"SED", KOC_opcode, 1, 137 },
  1099.     {"SEI", KOC_opcode, 1, 138 },
  1100.     {"SET", KOC_SET, 0, 0 },
  1101.     {"SMB0", KOC_opcode, 1, 139 },
  1102.     {"SMB1", KOC_opcode, 1, 140 },
  1103.     {"SMB2", KOC_opcode, 1, 141 },
  1104.     {"SMB3", KOC_opcode, 1, 142 },
  1105.     {"SMB4", KOC_opcode, 1, 143 },
  1106.     {"SMB5", KOC_opcode, 1, 144 },
  1107.     {"SMB6", KOC_opcode, 1, 145 },
  1108.     {"SMB7", KOC_opcode, 1, 146 },
  1109.     {"STA", KOC_opcode, 5, 147 },
  1110.     {"STRING", KOC_SDEF, 0, 0 },
  1111.     {"STX", KOC_opcode, 2, 152 },
  1112.     {"STY", KOC_opcode, 2, 154 },
  1113.     {"STZ", KOC_opcode, 2, 156 },
  1114.     {"TAX", KOC_opcode, 1, 158 },
  1115.     {"TAY", KOC_opcode, 1, 159 },
  1116.     {"TRB", KOC_opcode, 1, 160 },
  1117.     {"TSB", KOC_opcode, 1, 161 },
  1118.     {"TSX", KOC_opcode, 1, 162 },
  1119.     {"TXA", KOC_opcode, 1, 163 },
  1120.     {"TXS", KOC_opcode, 1, 164 },
  1121.     {"TYA", KOC_opcode, 1, 165 },
  1122.     {"WORD", KOC_WDEF, 0, 0 },
  1123.     { "", 0, 0, 0 }};
  1124.  
  1125. struct opsynt ostab[NUMSYNBLK+1]
  1126.     = {
  1127. /* invalid 0 */ { 0, 1, 0 },
  1128. /* invalid 1 */ { 0xffff, 1, 1 },
  1129. /* ADC 2 */ { ST_EXPR, 2, 2 },
  1130. /* ADC 3 */ { ST_IMMED, 1, 4 },
  1131. /* ADC 4 */ { ST_INDEX, 3, 5 },
  1132. /* ADC 5 */ { ST_INDIR, 1, 8 },
  1133. /* ADC 6 */ { ST_POSTINDEX, 1, 9 },
  1134. /* ADC 7 */ { ST_PREINDEX, 1, 10 },
  1135. /* AND 8 */ { ST_EXPR, 2, 11 },
  1136. /* AND 9 */ { ST_IMMED, 1, 13 },
  1137. /* AND 10 */ { ST_INDEX, 3, 14 },
  1138. /* AND 11 */ { ST_INDIR, 1, 17 },
  1139. /* AND 12 */ { ST_POSTINDEX, 1, 18 },
  1140. /* AND 13 */ { ST_PREINDEX, 1, 19 },
  1141. /* ASL 14 */ { ST_ACCUM, 1, 20 },
  1142. /* ASL 15 */ { ST_EXPR, 2, 21 },
  1143. /* ASL 16 */ { ST_INDEX, 2, 23 },
  1144. /* BBR0 17 */ { ST_DIRREL, 1, 25 },
  1145. /* BBR1 18 */ { ST_DIRREL, 1, 26 },
  1146. /* BBR2 19 */ { ST_DIRREL, 1, 27 },
  1147. /* BBR3 20 */ { ST_DIRREL, 1, 28 },
  1148. /* BBR4 21 */ { ST_DIRREL, 1, 29 },
  1149. /* BBR5 22 */ { ST_DIRREL, 1, 30 },
  1150. /* BBR6 23 */ { ST_DIRREL, 1, 31 },
  1151. /* BBR7 24 */ { ST_DIRREL, 1, 32 },
  1152. /* BBS0 25 */ { ST_DIRREL, 1, 33 },
  1153. /* BBS1 26 */ { ST_DIRREL, 1, 34 },
  1154. /* BBS2 27 */ { ST_DIRREL, 1, 35 },
  1155. /* BBS3 28 */ { ST_DIRREL, 1, 36 },
  1156. /* BBS4 29 */ { ST_DIRREL, 1, 37 },
  1157. /* BBS5 30 */ { ST_DIRREL, 1, 38 },
  1158. /* BBS6 31 */ { ST_DIRREL, 1, 39 },
  1159. /* BBS7 32 */ { ST_DIRREL, 1, 40 },
  1160. /* BCC 33 */ { ST_EXPR, 1, 41 },
  1161. /* BCS 34 */ { ST_EXPR, 1, 42 },
  1162. /* BEQ 35 */ { ST_EXPR, 1, 43 },
  1163. /* BGE 36 */ { ST_EXPR, 1, 44 },
  1164. /* BIT 37 */ { ST_EXPR, 2, 45 },
  1165. /* BIT 38 */ { ST_IMMED, 1, 47 },
  1166. /* BIT 39 */ { ST_INDEX, 2, 48 },
  1167. /* BLT 40 */ { ST_EXPR, 1, 50 },
  1168. /* BMI 41 */ { ST_EXPR, 1, 51 },
  1169. /* BNE 42 */ { ST_EXPR, 1, 52 },
  1170. /* BPL 43 */ { ST_EXPR, 1, 53 },
  1171. /* BRA 44 */ { ST_EXPR, 2, 54 },
  1172. /* BRK 45 */ { ST_IMMED, 1, 56 },
  1173. /* BRK 46 */ { ST_INH, 1, 57 },
  1174. /* BVC 47 */ { ST_EXPR, 1, 58 },
  1175. /* BVS 48 */ { ST_EXPR, 1, 59 },
  1176. /* CLC 49 */ { ST_INH, 1, 60 },
  1177. /* CLD 50 */ { ST_INH, 1, 61 },
  1178. /* CLI 51 */ { ST_INH, 1, 62 },
  1179. /* CLV 52 */ { ST_INH, 1, 63 },
  1180. /* CMP 53 */ { ST_EXPR, 2, 64 },
  1181. /* CMP 54 */ { ST_IMMED, 1, 66 },
  1182. /* CMP 55 */ { ST_INDEX, 3, 67 },
  1183. /* CMP 56 */ { ST_INDIR, 1, 70 },
  1184. /* CMP 57 */ { ST_POSTINDEX, 1, 71 },
  1185. /* CMP 58 */ { ST_PREINDEX, 1, 72 },
  1186. /* CPX 59 */ { ST_EXPR, 2, 73 },
  1187. /* CPX 60 */ { ST_IMMED, 1, 75 },
  1188. /* CPY 61 */ { ST_EXPR, 2, 76 },
  1189. /* CPY 62 */ { ST_IMMED, 1, 78 },
  1190. /* DEC 63 */ { ST_ACCUM, 1, 79 },
  1191. /* DEC 64 */ { ST_EXPR, 2, 80 },
  1192. /* DEC 65 */ { ST_INDEX, 2, 82 },
  1193. /* DEX 66 */ { ST_INH, 1, 84 },
  1194. /* DEY 67 */ { ST_INH, 1, 85 },
  1195. /* EOR 68 */ { ST_EXPR, 2, 86 },
  1196. /* EOR 69 */ { ST_IMMED, 1, 88 },
  1197. /* EOR 70 */ { ST_INDEX, 3, 89 },
  1198. /* EOR 71 */ { ST_INDIR, 1, 92 },
  1199. /* EOR 72 */ { ST_POSTINDEX, 1, 93 },
  1200. /* EOR 73 */ { ST_PREINDEX, 1, 94 },
  1201. /* INC 74 */ { ST_ACCUM, 1, 95 },
  1202. /* INC 75 */ { ST_EXPR, 2, 96 },
  1203. /* INC 76 */ { ST_INDEX, 2, 98 },
  1204. /* INX 77 */ { ST_INH, 1, 100 },
  1205. /* INY 78 */ { ST_INH, 1, 101 },
  1206. /* JMP 79 */ { ST_EXPR, 1, 102 },
  1207. /* JMP 80 */ { ST_INDIR, 1, 103 },
  1208. /* JMP 81 */ { ST_PREINDEX, 1, 104 },
  1209. /* JSR 82 */ { ST_EXPR, 1, 105 },
  1210. /* LDA 83 */ { ST_EXPR, 2, 106 },
  1211. /* LDA 84 */ { ST_IMMED, 1, 108 },
  1212. /* LDA 85 */ { ST_INDEX, 3, 109 },
  1213. /* LDA 86 */ { ST_INDIR, 1, 112 },
  1214. /* LDA 87 */ { ST_POSTINDEX, 1, 113 },
  1215. /* LDA 88 */ { ST_PREINDEX, 1, 114 },
  1216. /* LDX 89 */ { ST_EXPR, 2, 115 },
  1217. /* LDX 90 */ { ST_IMMED, 1, 117 },
  1218. /* LDX 91 */ { ST_INDEX, 2, 118 },
  1219. /* LDY 92 */ { ST_EXPR, 2, 120 },
  1220. /* LDY 93 */ { ST_IMMED, 1, 122 },
  1221. /* LDY 94 */ { ST_INDEX, 2, 123 },
  1222. /* LSR 95 */ { ST_ACCUM, 1, 125 },
  1223. /* LSR 96 */ { ST_EXPR, 2, 126 },
  1224. /* LSR 97 */ { ST_INDEX, 2, 128 },
  1225. /* MUL 98 */ { ST_INH, 1, 130 },
  1226. /* NOP 99 */ { ST_INH, 1, 131 },
  1227. /* ORA 100 */ { ST_EXPR, 2, 132 },
  1228. /* ORA 101 */ { ST_IMMED, 1, 134 },
  1229. /* ORA 102 */ { ST_INDEX, 3, 135 },
  1230. /* ORA 103 */ { ST_INDIR, 1, 138 },
  1231. /* ORA 104 */ { ST_POSTINDEX, 1, 139 },
  1232. /* ORA 105 */ { ST_PREINDEX, 1, 140 },
  1233. /* PHA 106 */ { ST_INH, 1, 141 },
  1234. /* PHP 107 */ { ST_INH, 1, 142 },
  1235. /* PHX 108 */ { ST_INH, 2, 143 },
  1236. /* PHY 109 */ { ST_INH, 2, 145 },
  1237. /* PLA 110 */ { ST_INH, 1, 147 },
  1238. /* PLP 111 */ { ST_INH, 1, 148 },
  1239. /* PLX 112 */ { ST_INH, 2, 149 },
  1240. /* PLY 113 */ { ST_INH, 2, 151 },
  1241. /* RMB0 114 */ { ST_EXPR, 1, 153 },
  1242. /* RMB1 115 */ { ST_EXPR, 1, 154 },
  1243. /* RMB2 116 */ { ST_EXPR, 1, 155 },
  1244. /* RMB3 117 */ { ST_EXPR, 1, 156 },
  1245. /* RMB4 118 */ { ST_EXPR, 1, 157 },
  1246. /* RMB5 119 */ { ST_EXPR, 1, 158 },
  1247. /* RMB6 120 */ { ST_EXPR, 1, 159 },
  1248. /* RMB7 121 */ { ST_EXPR, 1, 160 },
  1249. /* ROL 122 */ { ST_ACCUM, 1, 161 },
  1250. /* ROL 123 */ { ST_EXPR, 2, 162 },
  1251. /* ROL 124 */ { ST_INDEX, 2, 164 },
  1252. /* ROR 125 */ { ST_ACCUM, 1, 166 },
  1253. /* ROR 126 */ { ST_EXPR, 2, 167 },
  1254. /* ROR 127 */ { ST_INDEX, 2, 169 },
  1255. /* RTI 128 */ { ST_INH, 1, 171 },
  1256. /* RTS 129 */ { ST_INH, 1, 172 },
  1257. /* SBC 130 */ { ST_EXPR, 2, 173 },
  1258. /* SBC 131 */ { ST_IMMED, 1, 175 },
  1259. /* SBC 132 */ { ST_INDEX, 3, 176 },
  1260. /* SBC 133 */ { ST_INDIR, 1, 179 },
  1261. /* SBC 134 */ { ST_POSTINDEX, 1, 180 },
  1262. /* SBC 135 */ { ST_PREINDEX, 1, 181 },
  1263. /* SEC 136 */ { ST_INH, 1, 182 },
  1264. /* SED 137 */ { ST_INH, 1, 183 },
  1265. /* SEI 138 */ { ST_INH, 1, 184 },
  1266. /* SMB0 139 */ { ST_EXPR, 1, 185 },
  1267. /* SMB1 140 */ { ST_EXPR, 1, 186 },
  1268. /* SMB2 141 */ { ST_EXPR, 1, 187 },
  1269. /* SMB3 142 */ { ST_EXPR, 1, 188 },
  1270. /* SMB4 143 */ { ST_EXPR, 1, 189 },
  1271. /* SMB5 144 */ { ST_EXPR, 1, 190 },
  1272. /* SMB6 145 */ { ST_EXPR, 1, 191 },
  1273. /* SMB7 146 */ { ST_EXPR, 1, 192 },
  1274. /* STA 147 */ { ST_EXPR, 2, 193 },
  1275. /* STA 148 */ { ST_INDEX, 3, 195 },
  1276. /* STA 149 */ { ST_INDIR, 1, 198 },
  1277. /* STA 150 */ { ST_POSTINDEX, 1, 199 },
  1278. /* STA 151 */ { ST_PREINDEX, 1, 200 },
  1279. /* STX 152 */ { ST_EXPR, 2, 201 },
  1280. /* STX 153 */ { ST_INDEX, 1, 203 },
  1281. /* STY 154 */ { ST_EXPR, 2, 204 },
  1282. /* STY 155 */ { ST_INDEX, 1, 206 },
  1283. /* STZ 156 */ { ST_EXPR, 2, 207 },
  1284. /* STZ 157 */ { ST_INDEX, 2, 209 },
  1285. /* TAX 158 */ { ST_INH, 1, 211 },
  1286. /* TAY 159 */ { ST_INH, 1, 212 },
  1287. /* TRB 160 */ { ST_EXPR, 2, 213 },
  1288. /* TSB 161 */ { ST_EXPR, 2, 215 },
  1289. /* TSX 162 */ { ST_INH, 1, 217 },
  1290. /* TXA 163 */ { ST_INH, 1, 218 },
  1291. /* TXS 164 */ { ST_INH, 1, 219 },
  1292. /* TYA 165 */ { ST_INH, 1, 220 },
  1293.     { 0, 0, 0 } };
  1294.  
  1295. struct igel igtab[NUMDIFFOP+1]
  1296.     = {
  1297. /* invalid 0 */   { 0 , 0, 
  1298.         "[Xnullentry" },
  1299. /* invalid 1 */   { 0 , 0, 
  1300.         "[Xinvalid opcode" },
  1301. /* ADC 2 */   { ADDRESS , DIRECT, 
  1302.         "65;[1=];" },
  1303. /* ADC 3 */   { ADDRESS , EXTENDED, 
  1304.         "6d;[1=]y" },
  1305. /* ADC 4 */   { 0 , 0, 
  1306.         "69;[1=];" },
  1307. /* ADC 5 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1308.         "75;[1=];" },
  1309. /* ADC 6 */   { ADDRESS|INDEXMASK , EXTENDED|INDEXX, 
  1310.         "7d;[1=]y" },
  1311. /* ADC 7 */   { INDEXMASK , INDEXY, 
  1312.         "79;[1=]y" },
  1313. /* ADC 8 */   { INSTCMOS|ADDRESS , DIRECT|INSTCMOS, 
  1314.         "72;[1=];" },
  1315. /* ADC 9 */   { ADDRESS|INDEXMASK , DIRECT|INDEXY, 
  1316.         "71;[1=];" },
  1317. /* ADC 10 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1318.         "61;[1=];" },
  1319. /* AND 11 */   { ADDRESS , DIRECT, 
  1320.         "25;[1=];" },
  1321. /* AND 12 */   { ADDRESS , EXTENDED, 
  1322.         "2d;[1=]y" },
  1323. /* AND 13 */   { 0 , 0, 
  1324.         "29;[1=];" },
  1325. /* AND 14 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1326.         "35;[1=];" },
  1327. /* AND 15 */   { ADDRESS|INDEXMASK , EXTENDED|INDEXX, 
  1328.         "3d;[1=]y" },
  1329. /* AND 16 */   { INDEXMASK , INDEXY, 
  1330.         "39;[1=]y" },
  1331. /* AND 17 */   { INSTCMOS|ADDRESS , DIRECT|INSTCMOS, 
  1332.         "32;[1=];" },
  1333. /* AND 18 */   { ADDRESS|INDEXMASK , DIRECT|INDEXY, 
  1334.         "31;[1=];" },
  1335. /* AND 19 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1336.         "21;[1=];" },
  1337. /* ASL 20 */   { 0 , 0, 
  1338.         "0a;" },
  1339. /* ASL 21 */   { ADDRESS , DIRECT, 
  1340.         "06;[1=];" },
  1341. /* ASL 22 */   { ADDRESS , EXTENDED, 
  1342.         "0e;[1=]y" },
  1343. /* ASL 23 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1344.         "16;[1=];" },
  1345. /* ASL 24 */   { ADDRESS|INDEXMASK , EXTENDED|INDEXX, 
  1346.         "1e;[1=]y" },
  1347. /* BBR0 25 */   { INSTROCKWELL , INSTROCKWELL, 
  1348.         "0f;[1=];[2=].Q.1+-r" },
  1349. /* BBR1 26 */   { INSTROCKWELL , INSTROCKWELL, 
  1350.         "1f;[1=];[2=].Q.1+-r" },
  1351. /* BBR2 27 */   { INSTROCKWELL , INSTROCKWELL, 
  1352.         "2f;[1=];[2=].Q.1+-r" },
  1353. /* BBR3 28 */   { INSTROCKWELL , INSTROCKWELL, 
  1354.         "3f;[1=];[2=].Q.1+-r" },
  1355. /* BBR4 29 */   { INSTROCKWELL , INSTROCKWELL, 
  1356.         "4f;[1=];[2=].Q.1+-r" },
  1357. /* BBR5 30 */   { INSTROCKWELL , INSTROCKWELL, 
  1358.         "5f;[1=];[2=].Q.1+-r" },
  1359. /* BBR6 31 */   { INSTROCKWELL , INSTROCKWELL, 
  1360.         "6f;[1=];[2=].Q.1+-r" },
  1361. /* BBR7 32 */   { INSTROCKWELL , INSTROCKWELL, 
  1362.         "7f;[1=];[2=].Q.1+-r" },
  1363. /* BBS0 33 */   { INSTROCKWELL , INSTROCKWELL, 
  1364.         "8f;[1=];[2=].Q.1+-r" },
  1365. /* BBS1 34 */   { INSTROCKWELL , INSTROCKWELL, 
  1366.         "9f;[1=];[2=].Q.1+-r" },
  1367. /* BBS2 35 */   { INSTROCKWELL , INSTROCKWELL, 
  1368.         "af;[1=];[2=].Q.1+-r" },
  1369. /* BBS3 36 */   { INSTROCKWELL , INSTROCKWELL, 
  1370.         "bf;[1=];[2=].Q.1+-r" },
  1371. /* BBS4 37 */   { INSTROCKWELL , INSTROCKWELL, 
  1372.         "cf;[1=];[2=].Q.1+-r" },
  1373. /* BBS5 38 */   { INSTROCKWELL , INSTROCKWELL, 
  1374.         "df;[1=];[2=].Q.1+-r" },
  1375. /* BBS6 39 */   { INSTROCKWELL , INSTROCKWELL, 
  1376.         "ef;[1=];[2=].Q.1+-r" },
  1377. /* BBS7 40 */   { INSTROCKWELL , INSTROCKWELL, 
  1378.         "ff;[1=];[2=].Q.1+-r" },
  1379. /* BCC 41 */   { 0 , 0, 
  1380.         "90;[1=].Q.1+-r" },
  1381. /* BCS 42 */   { 0 , 0, 
  1382.         "b0;[1=].Q.1+-r" },
  1383. /* BEQ 43 */   { 0 , 0, 
  1384.         "f0;[1=].Q.1+-r" },
  1385. /* BGE 44 */   { 0 , 0, 
  1386.         "b0;[1=].Q.1+-r" },
  1387. /* BIT 45 */   { ADDRESS , DIRECT, 
  1388.         "24;[1=];" },
  1389. /* BIT 46 */   { ADDRESS , EXTENDED, 
  1390.         "2c;[1=]y" },
  1391. /* BIT 47 */   { INSTCMOS , INSTCMOS, 
  1392.         "89;[1=];" },
  1393. /* BIT 48 */   { ADDRESS|INDEXMASK|INSTCMOS , DIRECT|INDEXX|INSTCMOS, 
  1394.         "34;[1=];" },
  1395. /* BIT 49 */   { ADDRESS|INDEXMASK|INSTCMOS , EXTENDED|INDEXX|INSTCMOS, 
  1396.         "3c;[1=]y" },
  1397. /* BLT 50 */   { 0 , 0, 
  1398.         "90;[1=].Q.1+-r" },
  1399. /* BMI 51 */   { 0 , 0, 
  1400.         "30;[1=].Q.1+-r" },
  1401. /* BNE 52 */   { 0 , 0, 
  1402.         "d0;[1=].Q.1+-r" },
  1403. /* BPL 53 */   { 0 , 0, 
  1404.         "10;[1=].Q.1+-r" },
  1405. /* BRA 54 */   { INST21 , INST21, 
  1406.         "80;[1=].Q.1+-r" },
  1407. /* BRA 55 */   { INSTCMOS , INSTCMOS, 
  1408.         "80;[1=].Q.1+-r" },
  1409. /* BRK 56 */   { 0 , 0, 
  1410.         "00;[1=];" },
  1411. /* BRK 57 */   { 0 , 0, 
  1412.         "00;" },
  1413. /* BVC 58 */   { 0 , 0, 
  1414.         "50;[1=].Q.1+-r" },
  1415. /* BVS 59 */   { 0 , 0, 
  1416.         "70;[1=].Q.1+-r" },
  1417. /* CLC 60 */   { 0 , 0, 
  1418.         "18;" },
  1419. /* CLD 61 */   { 0 , 0, 
  1420.         "d8;" },
  1421. /* CLI 62 */   { 0 , 0, 
  1422.         "58;" },
  1423. /* CLV 63 */   { 0 , 0, 
  1424.         "b8;" },
  1425. /* CMP 64 */   { ADDRESS , DIRECT, 
  1426.         "c5;[1=];" },
  1427. /* CMP 65 */   { ADDRESS , EXTENDED, 
  1428.         "cd;[1=]y" },
  1429. /* CMP 66 */   { 0 , 0, 
  1430.         "c9;[1=];" },
  1431. /* CMP 67 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1432.         "d5;[1=];" },
  1433. /* CMP 68 */   { ADDRESS|INDEXMASK , EXTENDED|INDEXX, 
  1434.         "dd;[1=]y" },
  1435. /* CMP 69 */   { INDEXMASK , INDEXY, 
  1436.         "d9;[1=]y" },
  1437. /* CMP 70 */   { INSTCMOS|ADDRESS , DIRECT|INSTCMOS, 
  1438.         "d2;[1=];" },
  1439. /* CMP 71 */   { ADDRESS|INDEXMASK , DIRECT|INDEXY, 
  1440.         "d1;[1=];" },
  1441. /* CMP 72 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1442.         "c1;[1=];" },
  1443. /* CPX 73 */   { ADDRESS , DIRECT, 
  1444.         "e4;[1=];" },
  1445. /* CPX 74 */   { ADDRESS , EXTENDED, 
  1446.         "ec;[1=]y" },
  1447. /* CPX 75 */   { 0 , 0, 
  1448.         "e0;[1=];" },
  1449. /* CPY 76 */   { ADDRESS , DIRECT, 
  1450.         "c4;[1=];" },
  1451. /* CPY 77 */   { ADDRESS , EXTENDED, 
  1452.         "cc;[1=]y" },
  1453. /* CPY 78 */   { 0 , 0, 
  1454.         "c0;[1=];" },
  1455. /* DEC 79 */   { INSTCMOS , INSTCMOS, 
  1456.         "3a;" },
  1457. /* DEC 80 */   { ADDRESS , DIRECT, 
  1458.         "c6;[1=];" },
  1459. /* DEC 81 */   { ADDRESS , EXTENDED, 
  1460.         "ce;[1=]y" },
  1461. /* DEC 82 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1462.         "d6;[1=];" },
  1463. /* DEC 83 */   { ADDRESS|INDEXMASK , EXTENDED|INDEXX, 
  1464.         "de;[1=]y" },
  1465. /* DEX 84 */   { 0 , 0, 
  1466.         "ca;" },
  1467. /* DEY 85 */   { 0 , 0, 
  1468.         "88;" },
  1469. /* EOR 86 */   { ADDRESS , DIRECT, 
  1470.         "45;[1=];" },
  1471. /* EOR 87 */   { ADDRESS , EXTENDED, 
  1472.         "4d;[1=]y" },
  1473. /* EOR 88 */   { 0 , 0, 
  1474.         "49;[1=];" },
  1475. /* EOR 89 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1476.         "55;[1=];" },
  1477. /* EOR 90 */   { ADDRESS|INDEXMASK , EXTENDED|INDEXX, 
  1478.         "5d;[1=]y" },
  1479. /* EOR 91 */   { INDEXMASK , INDEXY, 
  1480.         "59;[1=]y" },
  1481. /* EOR 92 */   { INSTCMOS|ADDRESS , DIRECT|INSTCMOS, 
  1482.         "52;[1=];" },
  1483. /* EOR 93 */   { ADDRESS|INDEXMASK , DIRECT|INDEXY, 
  1484.         "51;[1=];" },
  1485. /* EOR 94 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1486.         "41;[1=];" },
  1487. /* INC 95 */   { INSTCMOS , INSTCMOS, 
  1488.         "1a;" },
  1489. /* INC 96 */   { ADDRESS , DIRECT, 
  1490.         "e6;[1=];" },
  1491. /* INC 97 */   { ADDRESS , EXTENDED, 
  1492.         "ee;[1=]y" },
  1493. /* INC 98 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1494.         "f6;[1=];" },
  1495. /* INC 99 */   { ADDRESS|INDEXMASK , EXTENDED|INDEXX, 
  1496.         "fe;[1=]y" },
  1497. /* INX 100 */   { 0 , 0, 
  1498.         "e8;" },
  1499. /* INY 101 */   { 0 , 0, 
  1500.         "c8;" },
  1501. /* JMP 102 */   { 0 , 0, 
  1502.         "4c;[1=]y" },
  1503. /* JMP 103 */   { 0 , 0, 
  1504.         "6c;[1=]y" },
  1505. /* JMP 104 */   { INSTCMOS|INDEXMASK , INSTCMOS|INDEXX, 
  1506.         "7c;[1=]y" },
  1507. /* JSR 105 */   { 0 , 0, 
  1508.         "20;[1=]y" },
  1509. /* LDA 106 */   { ADDRESS , DIRECT, 
  1510.         "a5;[1=];" },
  1511. /* LDA 107 */   { ADDRESS , EXTENDED, 
  1512.         "ad;[1=]y" },
  1513. /* LDA 108 */   { 0 , 0, 
  1514.         "a9;[1=];" },
  1515. /* LDA 109 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1516.         "b5;[1=];" },
  1517. /* LDA 110 */   { ADDRESS|INDEXMASK , EXTENDED|INDEXX, 
  1518.         "bd;[1=]y" },
  1519. /* LDA 111 */   { INDEXMASK , INDEXY, 
  1520.         "b9;[1=]y" },
  1521. /* LDA 112 */   { INSTCMOS|ADDRESS , DIRECT|INSTCMOS, 
  1522.         "b2;[1=];" },
  1523. /* LDA 113 */   { ADDRESS|INDEXMASK , DIRECT|INDEXY, 
  1524.         "b1;[1=];" },
  1525. /* LDA 114 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1526.         "a1;[1=];" },
  1527. /* LDX 115 */   { ADDRESS , DIRECT, 
  1528.         "a6;[1=];" },
  1529. /* LDX 116 */   { ADDRESS , EXTENDED, 
  1530.         "ae;[1=]y" },
  1531. /* LDX 117 */   { 0 , 0, 
  1532.         "a2;[1=];" },
  1533. /* LDX 118 */   { ADDRESS|INDEXMASK , DIRECT|INDEXY, 
  1534.         "b6;[1=];" },
  1535. /* LDX 119 */   { ADDRESS|INDEXMASK , EXTENDED|INDEXY, 
  1536.         "be;[1=]y" },
  1537. /* LDY 120 */   { ADDRESS , DIRECT, 
  1538.         "a4;[1=];" },
  1539. /* LDY 121 */   { ADDRESS , EXTENDED, 
  1540.         "ac;[1=]y" },
  1541. /* LDY 122 */   { 0 , 0, 
  1542.         "a0;[1=];" },
  1543. /* LDY 123 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1544.         "b4;[1=];" },
  1545. /* LDY 124 */   { ADDRESS|INDEXMASK , EXTENDED|INDEXX, 
  1546.         "bc;[1=]y" },
  1547. /* LSR 125 */   { 0 , 0, 
  1548.         "4a;" },
  1549. /* LSR 126 */   { ADDRESS , DIRECT, 
  1550.         "46;[1=];" },
  1551. /* LSR 127 */   { ADDRESS , EXTENDED, 
  1552.         "4e;[1=]y" },
  1553. /* LSR 128 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1554.         "56;[1=];" },
  1555. /* LSR 129 */   { ADDRESS|INDEXMASK , EXTENDED|INDEXX, 
  1556.         "5e;[1=]y" },
  1557. /* MUL 130 */   { INST21 , INST21, 
  1558.         "02;" },
  1559. /* NOP 131 */   { 0 , 0, 
  1560.         "ea;" },
  1561. /* ORA 132 */   { ADDRESS , DIRECT, 
  1562.         "05;[1=];" },
  1563. /* ORA 133 */   { ADDRESS , EXTENDED, 
  1564.         "0d;[1=]y" },
  1565. /* ORA 134 */   { 0 , 0, 
  1566.         "09;[1=];" },
  1567. /* ORA 135 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1568.         "15;[1=];" },
  1569. /* ORA 136 */   { ADDRESS|INDEXMASK , EXTENDED|INDEXX, 
  1570.         "1d;[1=]y" },
  1571. /* ORA 137 */   { INDEXMASK , INDEXY, 
  1572.         "19;[1=]y" },
  1573. /* ORA 138 */   { INSTCMOS|ADDRESS , DIRECT|INSTCMOS, 
  1574.         "12;[1=];" },
  1575. /* ORA 139 */   { ADDRESS|INDEXMASK , DIRECT|INDEXY, 
  1576.         "11;[1=];" },
  1577. /* ORA 140 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1578.         "01;[1=];" },
  1579. /* PHA 141 */   { 0 , 0, 
  1580.         "48;" },
  1581. /* PHP 142 */   { 0 , 0, 
  1582.         "08;" },
  1583. /* PHX 143 */   { INSTCMOS , INSTCMOS, 
  1584.         "da;" },
  1585. /* PHX 144 */   { INST21 , INST21, 
  1586.         "da;" },
  1587. /* PHY 145 */   { INSTCMOS , INSTCMOS, 
  1588.         "5a;" },
  1589. /* PHY 146 */   { INST21 , INST21, 
  1590.         "5a;" },
  1591. /* PLA 147 */   { 0 , 0, 
  1592.         "68;" },
  1593. /* PLP 148 */   { 0 , 0, 
  1594.         "28;" },
  1595. /* PLX 149 */   { INSTCMOS , INSTCMOS, 
  1596.         "fa;" },
  1597. /* PLX 150 */   { INST21 , INST21, 
  1598.         "fa;" },
  1599. /* PLY 151 */   { INSTCMOS , INSTCMOS, 
  1600.         "7a;" },
  1601. /* PLY 152 */   { INST21 , INST21, 
  1602.         "7a;" },
  1603. /* RMB0 153 */   { INSTROCKWELL , INSTROCKWELL, 
  1604.         "07;[1=];" },
  1605. /* RMB1 154 */   { INSTROCKWELL , INSTROCKWELL, 
  1606.         "17;[1=];" },
  1607. /* RMB2 155 */   { INSTROCKWELL , INSTROCKWELL, 
  1608.         "27;[1=];" },
  1609. /* RMB3 156 */   { INSTROCKWELL , INSTROCKWELL, 
  1610.         "37;[1=];" },
  1611. /* RMB4 157 */   { INSTROCKWELL , INSTROCKWELL, 
  1612.         "47;[1=];" },
  1613. /* RMB5 158 */   { INSTROCKWELL , INSTROCKWELL, 
  1614.         "57;[1=];" },
  1615. /* RMB6 159 */   { INSTROCKWELL , INSTROCKWELL, 
  1616.         "67;[1=];" },
  1617. /* RMB7 160 */   { INSTROCKWELL , INSTROCKWELL, 
  1618.         "77;[1=];" },
  1619. /* ROL 161 */   { 0 , 0, 
  1620.         "2a;" },
  1621. /* ROL 162 */   { ADDRESS , DIRECT, 
  1622.         "26;[1=];" },
  1623. /* ROL 163 */   { ADDRESS , EXTENDED, 
  1624.         "2e;[1=]y" },
  1625. /* ROL 164 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1626.         "36;[1=];" },
  1627. /* ROL 165 */   { ADDRESS|INDEXMASK , EXTENDED|INDEXX, 
  1628.         "3e;[1=]y" },
  1629. /* ROR 166 */   { 0 , 0, 
  1630.         "6a;" },
  1631. /* ROR 167 */   { ADDRESS , DIRECT, 
  1632.         "66;[1=];" },
  1633. /* ROR 168 */   { ADDRESS , EXTENDED, 
  1634.         "6e;[1=]y" },
  1635. /* ROR 169 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1636.         "76;[1=];" },
  1637. /* ROR 170 */   { ADDRESS|INDEXMASK , EXTENDED|INDEXX, 
  1638.         "7e;[1=]y" },
  1639. /* RTI 171 */   { 0 , 0, 
  1640.         "40;" },
  1641. /* RTS 172 */   { 0 , 0, 
  1642.         "60;" },
  1643. /* SBC 173 */   { ADDRESS , DIRECT, 
  1644.         "e5;[1=];" },
  1645. /* SBC 174 */   { ADDRESS , EXTENDED, 
  1646.         "ed;[1=]y" },
  1647. /* SBC 175 */   { 0 , 0, 
  1648.         "e9;[1=];" },
  1649. /* SBC 176 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1650.         "f5;[1=];" },
  1651. /* SBC 177 */   { ADDRESS|INDEXMASK , EXTENDED|INDEXX, 
  1652.         "fd;[1=]y" },
  1653. /* SBC 178 */   { INDEXMASK , INDEXY, 
  1654.         "f9;[1=]y" },
  1655. /* SBC 179 */   { INSTCMOS|ADDRESS , DIRECT|INSTCMOS, 
  1656.         "f2;[1=];" },
  1657. /* SBC 180 */   { ADDRESS|INDEXMASK , DIRECT|INDEXY, 
  1658.         "f1;[1=];" },
  1659. /* SBC 181 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1660.         "e1;[1=];" },
  1661. /* SEC 182 */   { 0 , 0, 
  1662.         "38;" },
  1663. /* SED 183 */   { 0 , 0, 
  1664.         "f8;" },
  1665. /* SEI 184 */   { 0 , 0, 
  1666.         "78;" },
  1667. /* SMB0 185 */   { INSTROCKWELL , INSTROCKWELL, 
  1668.         "87;[1=];" },
  1669. /* SMB1 186 */   { INSTROCKWELL , INSTROCKWELL, 
  1670.         "97;[1=];" },
  1671. /* SMB2 187 */   { INSTROCKWELL , INSTROCKWELL, 
  1672.         "a7;[1=];" },
  1673. /* SMB3 188 */   { INSTROCKWELL , INSTROCKWELL, 
  1674.         "b7;[1=];" },
  1675. /* SMB4 189 */   { INSTROCKWELL , INSTROCKWELL, 
  1676.         "c7;[1=];" },
  1677. /* SMB5 190 */   { INSTROCKWELL , INSTROCKWELL, 
  1678.         "d7;[1=];" },
  1679. /* SMB6 191 */   { INSTROCKWELL , INSTROCKWELL, 
  1680.         "e7;[1=];" },
  1681. /* SMB7 192 */   { INSTROCKWELL , INSTROCKWELL, 
  1682.         "f7;[1=];" },
  1683. /* STA 193 */   { ADDRESS , DIRECT, 
  1684.         "85;[1=];" },
  1685. /* STA 194 */   { ADDRESS , EXTENDED, 
  1686.         "8d;[1=]y" },
  1687. /* STA 195 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1688.         "95;[1=];" },
  1689. /* STA 196 */   { ADDRESS|INDEXMASK , EXTENDED|INDEXX, 
  1690.         "9d;[1=]y" },
  1691. /* STA 197 */   { INDEXMASK , INDEXY, 
  1692.         "99;[1=]y" },
  1693. /* STA 198 */   { INSTCMOS|ADDRESS , DIRECT|INSTCMOS, 
  1694.         "92;[1=];" },
  1695. /* STA 199 */   { ADDRESS|INDEXMASK , DIRECT|INDEXY, 
  1696.         "91;[1=];" },
  1697. /* STA 200 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1698.         "81;[1=];" },
  1699. /* STX 201 */   { ADDRESS , DIRECT, 
  1700.         "86;[1=];" },
  1701. /* STX 202 */   { ADDRESS , EXTENDED, 
  1702.         "8e;[1=]y" },
  1703. /* STX 203 */   { ADDRESS|INDEXMASK , DIRECT|INDEXY, 
  1704.         "96;[1=];" },
  1705. /* STY 204 */   { ADDRESS , DIRECT, 
  1706.         "84;[1=];" },
  1707. /* STY 205 */   { ADDRESS , EXTENDED, 
  1708.         "8c;[1=]y" },
  1709. /* STY 206 */   { ADDRESS|INDEXMASK , DIRECT|INDEXX, 
  1710.         "94;[1=];" },
  1711. /* STZ 207 */   { ADDRESS|INSTCMOS , DIRECT|INSTCMOS, 
  1712.         "64;[1=];" },
  1713. /* STZ 208 */   { ADDRESS|INSTCMOS , EXTENDED|INSTCMOS, 
  1714.         "9c;[1=]y" },
  1715. /* STZ 209 */   { ADDRESS|INDEXMASK|INSTCMOS , DIRECT|INDEXX|INSTCMOS, 
  1716.         "74;[1=];" },
  1717. /* STZ 210 */   { ADDRESS|INDEXMASK|INSTCMOS , EXTENDED|INDEXX|INSTCMOS, 
  1718.         "9e;[1=]y" },
  1719. /* TAX 211 */   { 0 , 0, 
  1720.         "aa;" },
  1721. /* TAY 212 */   { 0 , 0, 
  1722.         "a8;" },
  1723. /* TRB 213 */   { ADDRESS|INSTCMOS , DIRECT|INSTCMOS, 
  1724.         "14;[1=];" },
  1725. /* TRB 214 */   { ADDRESS|INSTCMOS , EXTENDED|INSTCMOS, 
  1726.         "1c;[1=]y" },
  1727. /* TSB 215 */   { ADDRESS|INSTCMOS , DIRECT|INSTCMOS, 
  1728.         "04;[1=];" },
  1729. /* TSB 216 */   { ADDRESS|INSTCMOS , EXTENDED|INSTCMOS, 
  1730.         "0c;[1=]y" },
  1731. /* TSX 217 */   { 0 , 0, 
  1732.         "ba;" },
  1733. /* TXA 218 */   { 0 , 0, 
  1734.         "8a;" },
  1735. /* TXS 219 */   { 0 , 0, 
  1736.         "9a;" },
  1737. /* TYA 220 */   { 0 , 0, 
  1738.         "98;" },
  1739.     { 0,0,""} };
  1740. /* end fraptabdef.c */
  1741.